<?php

namespace Admin\Model;

use Think\Model;

/**
 * 权限控制模型类
 * 
 * 该类实现指定用户的权限、以及可以操作的菜单列表
 * 
 * @author: xuhui <xuh86@126.com>
 * @version: $Id$
 * @package: asoc.Admin.Model
 * 
 */

class AccessModel extends Model {

	/**
	 * 根据指定的用户id返回操作权限
	 * @param int $uid:用户id 可选
	 * @param string $module: 模块名称 可选
	 * @param string $action: 操作名称 可选
	 * @return boolean 
	 */
	public function isAccess($uid=0,$module='',$action=''){
		
		$access		=	false;
		
		$uid		=	$uid > 0 ? $uid : session(C('BE_UID'));
		
		if ($uid){
		
			$module		=	empty($module) ? controller : $module;
			$action		=	empty($action) ? ACTION_NAME : $action;
			
			//超级管理员跳过权限认证
			if(!$this->isSupper($uid)){

				$smenu		=	M('SysMenu');
				$actionInfo	=	$smenu->where("`module`='".$module."' AND `action`='".$action."'")->find();

				if($actionInfo !== false){
				
					
					if($actionInfo['is_check']== 1){
					
						$roleIds	=	NULL;
						$roleList	=	$this->getAllRole($uid);	//所有角色
						
						if($roleList){
							foreach($roleList as $key=>$val){
								$roleIds[]	=	$val['role_id'];
							}
						}
						
						if($roleIds){
							
							$ara	=	M('AdminRoleAction');
							
							$map['action_id']	=	$actionInfo['id'];
							$map['role_id']	=	array('IN',$roleIds);
							$num	=	$ara->where($map)->count();
							
							$access	=	$num > 0 ? true : false;
						}
						
					}
					else{	//节点不需要权限验证
						
						$access		=	true;
					
					}
							
				}				
				
			}
			else{
				
				$access		=	true;
				
			}
			
		}
		
		return $access;
	}
	
	
	
	/**
	 * 查询一个管理员是否是超级管理员
	 * @param int $uid:用户id 
	 * @return boolean
	 */
	public function isSupper($uid){
		
		$flag	=	false;
		
		if($uid>0){
			
			$aur	=	M('AdminUserRole');
			
			$supperRoleId = 1;				//超级管理员角色id
			
			$num	=	$aur->where("user_id={$uid} AND role_id={$supperRoleId}")->count();
			
			$flag	=	$num>0 ? true : false;
		}

		return $flag;
	}
	
	/**
	 * 返回一个管理员所拥有的全部角色
	 * @param int $uid:用户id 
	 * @return array
	 */
	public function getAllRole($uid){
		
		$roleList		=	NULL;
		
		if($uid){
			
			$aur	=	M('AdminUserRole');
			
			$roleList	=	$aur->where("user_id={$uid}")->select();
			
		}
		
		return $roleList;
	}

}

?>